package org.credo.jws.failure;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


public class Test {

	private static final String userName = "testDJ123AAA";
	private static final String passWord = "pbpb123456";
	private static final String SMILMSG = "<smil xmlns=\"http://www.w3.org/2000/SMIL20/CR/Language\"><head><layout><root-layout width=\"208\" height=\"176\" /><region id=\"Image\" left=\"0\" top=\"0\" width=\"128\" height=\"128\" fit=\"hidden\" /><region id=\"Text\" left=\"0\" top=\"50\" width=\"128\" height=\"128\" fit=\"hidden\" /></layout></head><body><par dur=\"25000ms\"><text src=\"1.txt\" region=\"Text\" /></par></body></smil>";
	private static final int type = 1;
	private static final String title = "您有新的消息";
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Map<String,String> errors = new HashMap<String, String>();
		errors.put("OK", "彩信发送成功。");
		errors.put("FileExist", "文件已存在：出现此问题请联系亿美客服人员。");
		errors.put("FileNotExist", "文件不存在：获取彩信资源时失败，联系亿美客服人员。");
		errors.put("UserNamePasswordError", "用户名、密码错误：请核实用户名、密码，与亿美销售人员联系。");
		errors.put("UserNameExist", "用户名已存在：创建用户时可能会出现更换其它用户名。");
		errors.put("ZeroBlance", "余额为零：请查看发送类型或查看余额");
		errors.put("UserCreateError", "用户创建错误：创建用户时可能会出现，请记录返回值与技术部门联系。");
		errors.put("MMSSaveError", "彩信保存失败:发送彩信时可能会出现，请记录返回值与技术部门联系。");
		errors.put("ALLNotWhiteNumberList", "所有号码不在白名单中：发送的手机号不在白名单中，此用户的策略需要过滤白名单。");
		errors.put("ALLNoBlackNumberList", "所有号码在黑名单中：发送的手机号码全部为黑名单，此用户信息需要过滤黑名单。");
		errors.put("BlackDictionarykInContent", "内容中存在黑字典：发送的彩信内容中包函黑字典，此用户信息需要过滤黑字典。");
		errors.put("BlackDictionarykParameterError", "黑字典参数错误：黑字典参数错误，1、请检查黑字典服务，2、内容不能为空。");
		errors.put("BillingError", "计费失败：计费失败原因请记录返回值后与亿美客服联系。");
		errors.put("FilterError", "系统过滤器加载失败：系统启动过滤器异常，记录返回值后与亿美客服联系。");
		errors.put("StrategyError", "策略加载失败：系统启动策略异常，记录返回值后与亿美客服联系。");
		errors.put("StrategyNotExist", "策略不存在：记录返回值后与亿美客服联系。");
		errors.put("StoreNumberError", "存储手机号码失败：系统存储异常，记录返回值后与亿美客服联系。");
		errors.put("StoreContentError", "存储彩信资源文件失败：系统存储异常，记录返回值后与亿美客服联系。");
		errors.put("System", "系统其它异常：系统所有未分类别的异常，记录返回值后与亿美客服联系。");
		
		MMS mms = new MMS();
		try {
			// 第一个文件1.txt,字符流
			PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("1.txt"), "GB2312"));
			pw.print("世界你好，你好世界！赵谦。");
			pw.close();
			// 第二个文件 test.smil,字符流
			PrintWriter pw2 = new PrintWriter(new FileWriter("test.smil"));
			pw2.print(SMILMSG);
			pw2.close();
			// 压缩
			File f1 = new File("1.txt");
			File f2 = new File("test.smil");
			File[] srcfile = { f1, f2 };
			// 压缩后的文件
			File zipfile = new File("mms.zip");
			zipFiles(srcfile, zipfile);
			// 字节流
			FileInputStream fs = new FileInputStream(zipfile);
			byte[] Content = new byte[fs.available()];
			fs.read(Content, 0, Content.length);
			fs.close();
			String result = mms.getMMSSoap().sendMMS(userName, passWord, title, "18612033529", Content, type);
			System.out.println(result);
			String resultCode=result.substring(0,result.indexOf(":"));
			System.out.println("resultCode:"+resultCode);
			String resultStr = errors.get(resultCode);
			System.out.println("resultCode:" + resultCode + ".含义为：" + resultStr);
			if (null == resultCode) {
				throw new Exception("发送失败，请查看网络是否正常。");
			}
			if (null != resultCode && !resultCode.equals("OK")) {
				throw new Exception(resultCode + ":" + resultStr);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	private static void zipFiles(File[] srcfile, File zipfile) throws IOException {
		byte[] buf = new byte[1024];
		// ZipOutputStream类：完成文件或文件夹的压缩
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
		for (File element : srcfile) {
			FileInputStream in = new FileInputStream(element);
			out.putNextEntry(new ZipEntry(element.getName()));
			int len;
			while ((len = in.read(buf)) > 0) {
				out.write(buf, 0, len);
			}
			out.closeEntry();
			in.close();
		}
		out.close();
		System.out.println("压缩完成.");
	}
	
}
